import { build, defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import alias from "@rollup/plugin-alias";
const path = require('path')


/*
  base的值
  绝对 URL 路径名，例如 /foo/·
  完整的 URL，例如 https://foo.com/
  空字符串或 ./（用于开发环境）
*/



// https://vitejs.dev/config

export default defineConfig({
  root: process.cwd(), // 项目根目录，  默认 process.cwd() 也可当前配置文件的相对路径
  base: '/',   // 开发环境和生产环境路径  如果放如的生产环境不是在根目录下，需要要加上放入文件的文件名 '/product'
  plugins: [
    alias(),
    vue()
  ], // 用到的插件
  /* 
    如果你有下列这些资源：
    不会被源码引用（例如 robots.txt）
    必须保持原有文件名（没有经过 hash）
    ...或者你只是不想为了获取 URL 而首先导入该资源
  */
  publicDir: 'public',   // 指定目录，默认是public
  // assetsInclude: [],   // 用来指定哪些文件会被作为静态文件在打包的时候被打包进入,放开会导致挂载失败
  mode: "development", // 环境  默认"development" 开发环境
  resolve: {
    // 别名
    alias: {
      // 键必须以斜线开始和结束
      '/@/': path.resolve(__dirname, './src')
    },
    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'] // 导入时想要省略的扩展名列表，不建议省.vue
  },
  // css的配置
  css: {},
  logLevel: 'info',  // 控制台logo输出的级别
  clearScreen: true, //   vite清屏幕后找不到日志

  // 服务的配置
  server: {
    host: "127.0.0.1", // 主机名
    port: 3030, // 端口
    strictPort: true, // 端口被占用调用下个端口
    open: true,  // boolean | String 如果是boolean且为true 会自动打开浏览器。 配置是字符串 会被用作 URL 的路径名
    //   /*
    //     服务器代理地址，用于代理到后台的服务器。
    //   */
    proxy: {
      // 字符串简写写法
      '/foo': 'http://localhost:4567/foo',
      // 选项写法
      '/api': {
        target: 'http://jsonplaceholder.typicode.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      },
      // 正则表达式写法
      '^/fallback/.*': {
        target: 'http://jsonplaceholder.typicode.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/fallback/, '')
      }
    },
    force: true,  // 强制使依赖预构建。
  },
  // 正式环境的配置,某个配置只想在正式环境中有可以在这里配置
  build: {
    base: '/product/',  // 生产环境的路径
    target: 'modules', // 浏览器的兼容性，默认是moudle，表示支持ESM。“esnext” —— 即指执行 minify 转换（作最小化压缩）并假设有原生动态导入支持。
    outDir: 'test/dist/ces', //打包指定输出的路径，相当于项目根目录
    emptyOutDir: false, // 是不是清空outDir 文件，如果在根目录上默认为ture,如果不是会提示
    assetsDir: "public", //打包后静态资源存放路径，相对于outDir。
    assetsInlineLimit: 4096, // 小于此配置的会被base64编码，0为完全禁用
    cssCodeSplit: true, // 启用/禁用css代码拆分  如果禁用整个项目所有css将会提取为一个css
    sourcemap: false, // boolen| inline 构建后是不是生产source map 文件
    brotliSize: true, // 启用和禁用压缩报告
    chunkSizeWarningLimit: 500, // chunk大小警告
  },
  // 依赖优化相关的配置
  optimizeDeps: {
    entries: [], // 入口文件自定义的入口文件，感觉应该普通的开发中没有什么用
    exclude: [], // 在预构建中强制排除的依赖
    include: [], // 强制构建不在node_modules中的包 
  },
})
